package com.xiaoshuidi.cloud.module.contract.service.contract;

import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.stay.*;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractStayDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 交房退房 Service 接口
 *
 * @author 合房租赁
 */
public interface ContractStayService {

    /**
     * 创建交房退房
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createStay( ContractStayCreateReqVO createReqVO);

    /**
     * 获得交房退房
     *
     * @param contractId 合同编号
     * @return 交房退房
     */
    ContractStayRespVO getStay(Long contractId);

    /**
     * 编辑交房退房
     *
     * @param updateReqVO 创建信息
     */
    void editStay( ContractStayUpdateReqVO updateReqVO);

    /**
     * 获得交房退房分页
     *
     * @param pageReqVO 分页查询
     * @return 交房退房分页
     */
    PageResult<ContractStayPageRespVO> getStayPage(ContractStayPageReqVO pageReqVO);

    /**
     * 确认交房
     * @param id
     * @return: void
     */
    void confirmDelivery(Long id);

    /**
     * 获取退租交房清单
     * @param id
     * @return: com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.stay.ContractRentOutStayRespVO
     */
    ContractRentOutStayRespVO getRentOutDeliveryStay(Long id);

    /**
     * ids查询入住交割列表数据
     * @param ids
     * @return: java.util.List<com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractStayDO>
     */
    List<ContractStayDO> getStaysByIds(List<Long> ids);

    /**
     * 合同Ids查询入住交割列表数据
     * @param ids
     * @return: java.util.List<com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractStayDO>
     */
    List<ContractStayDO> getStaysByContractIds(List<Long> ids);

    String getRoomEquipmentsJson(Long roomId);

    /**
     * 会员号查询待处理入住
     * @param memberNo
     * @return: java.util.List<com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractStayDO>
     */
    List<ContractStayDO> getStayByMemberNo(Long memberNo);

    /**
     * 迁移交房数据
     * @param ids
     */
    void migrateStayData(List<Long> ids);
}
